package com.principle.builder;

import java.util.ArrayList;

/**
 * @description:汽车模型的抽象类
 * @author zhonghong.zhangxg
 * @date 2016年7月12日下午4:32:30
 */
public abstract class CarModel {
    /** 汽车模型所共有的指令执行顺序 */
	private ArrayList<String> sequence = new ArrayList<String>();
	
	/** 启动 */
	protected abstract void start();
	
	/** 停车 */
	protected abstract void stop();
	
	/** 鸣笛 */
	protected abstract void alarm();
	
	/** 发动引擎 */
	protected abstract void engineBoom();
	
	/**
	 * 汽车模型执行指令(不允许重写，只允许调用)
	 */
	final public void run() {
		for (int i = 0; i < this.sequence.size(); i++) {
			String actionName = this.sequence.get(i);
			if (actionName.equals("start")) {
				this.start();
			} else if (actionName.equals("stop")) {
				this.stop();
			} else if (actionName.equals("alarm")) {
				this.alarm();
			} else if (actionName.equals("engine boom")) {
				this.engineBoom();
			}
		}
	}
	
	/**
	 * 设置汽车模型的指令执行顺序
	 * @param sequence 字串指令的ArrayList集合(不允许重写，只允许调用)
	 */
	final public void setSequence(ArrayList<String> sequence) {
		this.sequence = sequence;
	}
}
